const path = require("path");
const config = require('./src/config-server');
const bodyParser = require('body-parser');
const fs = require('fs');

function resolve (dir) {
    return path.join(__dirname, dir)
}

function mockHook (app) {

    app.use(bodyParser.json({limit: '50mb'}));
    app.use(bodyParser.urlencoded({limit: '50mb',extended: false}));

    app.use((req, res, next) => {

        if (!(req.xhr && config.server.isMock)) return next();

        let url = req.path,
            file = url.replace(/\//g, '_') + '.js',
            params = req.method == 'GET' ? req.query : req.body;
        file = path.resolve(__dirname, 'src/mock', file);

        if (!fs.existsSync(file)) {
            let data = ''
                + 'module.exports = params => {\n'
                + '    return {\n'
                + '        "code": 200,\n'
                + '        "returnMsg": "执行成功",\n'
                + '        "data": {}\n'
                + '    }\n'
                + '}\n';

            fs.writeFileSync(file, data, 'utf-8', err => {
                console.log('创建文件'+file)
            })
        }

        delete require.cache[file];
        const fn = require(file);

        console.log('mock到本地文件：' + file);

        res.json(fn(params));
    });
}

module.exports = {
    filenameHashing: false,
    // productionSourceMap: false,
    pages: {
        login: {
            // page 的入口
            entry: 'src/entrance/login/main.js',
            // 模板来源
            template: 'public/login.html',
            // 在 dist/index.html 的输出
            filename: 'login.html',
            // 当使用 title 选项时，
            // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
            title: '登录页',
            // 在这个页面中包含的块，默认情况下会包含
            // 提取出来的通用 chunk 和 vendor chunk。
            chunks: ['chunk-vendors', 'chunk-common', 'login']
        },
        teacher: {
            // page 的入口
            entry: 'src/entrance/teacher/main.js',
            // 模板来源
            template: 'public/teacher.html',
            // 在 dist/index.html 的输出
            filename: 'teacher.html',
            // 当使用 title 选项时，
            // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
            title: '教学系统',
            description: '教师页面',
            tags: ['老师'],
            // 在这个页面中包含的块，默认情况下会包含
            // 提取出来的通用 chunk 和 vendor chunk。
            chunks: ['chunk-vendors', 'chunk-common', 'teacher']
        },
        student: {
            // page 的入口
            entry: 'src/entrance/student/main.js',
            // 模板来源
            template: 'public/student.html',
            // 在 dist/index.html 的输出
            filename: 'student.html',
            // 当使用 title 选项时，
            // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
            title: '教学系统',
            description: '学生页面',
            tags: ['学生'],
            // 在这个页面中包含的块，默认情况下会包含
            // 提取出来的通用 chunk 和 vendor chunk。
            chunks: ['chunk-vendors', 'chunk-common', 'student']
        },
        admin: {
            // page 的入口
            entry: 'src/entrance/admin/main.js',
            // 模板来源
            template: 'public/admin.html',
            // 在 dist/index.html 的输出
            filename: 'admin.html',
            // 当使用 title 选项时，
            // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
            title: '教学系统',
            description: '管理员页面',
            tags: ['管理员'],
            // 在这个页面中包含的块，默认情况下会包含
            // 提取出来的通用 chunk 和 vendor chunk。
            chunks: ['chunk-vendors', 'chunk-common', 'admin']
        }
    },
    chainWebpack: (config) => {
        config.resolve.alias
            .set('@nm', resolve("node_modules"))
            .set('@src', resolve("src"))
            .set('@components', resolve("src/components"))
            .set('@mock', resolve("src/mock"))
            .set('@modules', resolve("src/modules"))
            .set('@entrance', resolve("src/entrance"))
            .set('@assets', resolve("src/assets"))
            .set('@utils', resolve("src/utils"))
            .set('Api', resolve("src/utils/api"))
    },

    devServer: {
        // host: '0.0.0.0',
        port: config.server.port,
        contentBase : path.resolve(__dirname, "../dist"),
        historyApiFallback: true,                                                //不跳转
        noInfo: true,
        inline: true,                                                            //实时刷新
        hot : true,                                                              //热替换
        open : true,                                                             //自动打开浏览器
        disableHostCheck: true,
        before: mockHook,
        proxy: config.server.isMock ? false : [{
            context: ['**', '!/pages/**'],
            target: config.server.proxy.target,
            changeOrigin: true,
            secure: false,
            hostRewrite: "",
            headers: {
                'Host': '39.105.144.7',
                // 'Cookie': config.server.proxy.cookie,
            },
            bypass: req => {
                if (req.url.indexOf('/pages') > -1) return false;
                console.log('代理请求：' + req.url + '=>' + config.server.proxy.target + req.url.substr(1))
            }
        }]
    }
}